package jmine.tec.result.strategy;

import java.util.concurrent.TimeUnit;

import jmine.tec.cache.ExpiringMap;
import jmine.tec.result.api.CacheStrategy;

/**
 * Implementação de {@link CacheStrategy} que utiliza um {@link ExpiringMap} internamente.
 * <p>
 * O {@link ExpiringMap} utilizado é THREADSAFE fazendo com que este {@link CacheStrategy} também seja.
 * 
 * @author jrenaut
 */
public class ExpiringCacheStrategy implements CacheStrategy {

    private ExpiringMap<Object, Object> cache;

    /**
     * C'tor
     * 
     * @param timeout o timeout
     * @param unit a unidade do timeout
     */
    public ExpiringCacheStrategy(long timeout, TimeUnit unit) {
        super();
        this.cache = new ExpiringMap<Object, Object>(true, timeout, unit);
    }

    /**
     * {@inheritDoc}
     */
    public Object getValue(Object key) {
        return this.cache.get(key);
    }

    /**
     * {@inheritDoc}
     */
    public void putValue(Object key) {
        this.cache.put(key, key);
    }

}
